package server

import (
	"fmt"
	"slices"

	"github.com/gin-gonic/gin"

	"{{filepathJoin .ModName "internal/app/" .ServerName "middleware"}}"
	"{{filepathJoin .ModName "internal/pkg/conf"}}"
)

var modes = []string{"debug", "release", "test"}

// Run 函数用于启动 HTTP 服务
func Run() error {
	// 从配置中获取 HTTP 模式，并检查是否在有效模式列表中
	if mode := conf.GetString("http.mode"); slices.Index(modes, mode) >= 0 {
		// 设置 Gin 的运行模式
		gin.SetMode(mode)
	}

	// 创建一个默认的 Gin 路由器实例
	s := gin.Default()

	// 使用自定义的请求日志中间件
	s.Use(middleware.RequestLogMiddleware())
	// 使用自定义的响应日志中间件
	s.Use(middleware.ResponseLogMiddleware())

	// 初始化路由和处理器
	Init(s)

	// 格式化监听地址，使用配置文件中的端口号
	address := fmt.Sprintf(":%d", conf.GetInt("http.port"))

	// 启动 HTTP 服务，如果遇到错误则返回
	if err := s.Run(address); err != nil {
		return err
	}

	// 正常启动服务，返回 nil 表示无错误
	return nil
}